package mysql8学习.高级.第15章_锁;

/**
 * ② 间隙锁(Gap Locks)  简单来说就是让此纪录的左右间隙两边不可以插入数据
 *                      比如有 id=3和8  你在5上加了个锁，其实并没有此数据
 *                      但是间隙锁可以让你（3，8）之间都不可以插入
 *                      但是如果最大20，你锁了 25  那么（20，+无穷）
 * MySQL在REPEATABLE READ 隔离级别下是可以解决幻读问题的,解决方案有两种，
 * 可以使用MVCC方案解决,也可以采用加锁方案解决。
 * 但是在使用加锁方案解决时有个大问题，就是事务在第一次执行读取操作时，
 * 那些幻影记录尚不存在，我们无法给这些幻影记录加上记录锁。
 * InnoDB提出了一种称之为Gap Locks 的锁，官方的类型名称为: LOCK GAP，
 * 我们可以简称为gap锁。
 * gap锁的提出仅仅是为了防止插入幻影记录而提出的。
 * 虽然有共享gap锁和独占gap锁这样的说法，但是它们起到的作用是相同的。
 * 而且如果对一条记录加了gap锁(不论是共享gap锁还是独占gap锁) ,
 * 并不会限制其他事务对这条记录加记录锁或者继续加gap锁。
 *
 *
 * 间隙锁的引入，可能会导致同样的语句锁住更大的范围，这其实是影响了并发度的。
 * 下面的例子 会产生死锁
 * 如有id=3和8  其中一个事务在5上加了个锁，
 *             另一个事务在6上加了个锁，  会产生死锁
 *   但是mysql智能  他会自己结束一个成本最低的锁或者到超时自动结束
 *
 */
public class C_B2_2_间隙锁 {
}
